package study.cv.image.support.utils;

import cn.hutool.core.util.StrUtil;
import org.apache.batik.anim.dom.SVGDOMImplementation;
import org.apache.batik.svggen.SVGGraphics2D;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.svg.SVGDocument;

import java.awt.*;
import java.awt.image.BufferedImage;

/**
 * svg
 */
public final class SvgUtils {

    private SvgUtils() {
    }

    /**
     * png 转换 svg
     */
    public static void png2Svg(BufferedImage img, int w, int h, String svgName) {
        try {
            // svg文档
            DOMImplementation domImpl = SVGDOMImplementation.getDOMImplementation();
            String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
            SVGDocument doc = (SVGDocument) domImpl.createDocument(svgNS, "svg", null);

            // 创建 svg 画布
            SVGGraphics2D g2d = new SVGGraphics2D(doc);
            // 画布大小
            Dimension dim = new Dimension(w, h);
            g2d.setSVGCanvasSize(dim);

            // 绘制 svg 路径
            g2d.drawImage(img, 0, 0, null);

            // 保存 svg 文件
            g2d.stream(StrUtil.format("{}.svg", svgName), true);
        } catch (Exception ex) {
            throw new RuntimeException("", ex);
        }
    }
}
